// #include<iostream>
// #include<signal.h>
// using namespace std;

// void Print(sigset_t& set)
// {
//     for(int i=31;i>0;i--)
//     {
//         if(sigismember(&set,i))
//             cout<<1;
//         else
//             cout<<0;
//     }
//     cout<<endl;
// }
// int main()
// {
//     //将2号信号屏蔽
//     sigset_t set,oset;
//     sigemptyset(&set);
//     sigemptyset(&oset);
//     sigaddset(&set,2);
//     //将2号信号的屏蔽字添加到block表中
//     sigprocmask(SIG_SETMASK,&set,&oset);

//     int cnt=15;
//     while(true)
//     {
//         //获取并打印pending表
//         sigset_t pending;
//         sigpending(&pending);
//         cout<<"Pending Table:";
//         Print(pending);
//         sleep(1);
//         if(cnt==0)
//         {
//             //解除对2号信号的屏蔽
//             sigprocmask(SIG_SETMASK,&oset,nullptr);
//         }
//         cnt--;
//     }
//     return 0;
// }

// #include <stdio.h>
// #include <signal.h>
// int flag = 0;
// void handler(int sig)
// {
//     printf("chage flag 0 to 1\n");
//     flag = 1;
// }
// int main()
// {
//     signal(2, handler);
//     while (!flag);
//     printf("process quit normal\n");
//     return 0;
// }

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
void handler(int sig)
{
    pid_t id;
    while ((id = waitpid(-1, NULL, WNOHANG)) > 0)
    {
        printf("wait child success: %d\n", id);
    }
    printf("child is quit! %d\n", getpid());
}
int main()
{
    signal(SIGCHLD, SIG_IGN);
    pid_t cid;
    if ((cid = fork()) == 0)
    { // child
        printf("child : %d\n", getpid());
        sleep(3);
        exit(1);
    }
    while (1)
    {
        printf("father proc is doing some thing!\n");
        sleep(1);
    }
    return 0;
}
